<?php

namespace CHOMP\SGIBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use CHOMP\SGIBundle\Entity\Autorizacion;
use CHOMP\SGIBundle\Entity\Permiso;
use CHOMP\SGIBundle\Entity\PermisoAutorizacion;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;


/**
 * @ORM\Entity(repositoryClass="CHOMP\SGIBundle\Entity\RolRepository")
 * @ORM\HasLifecycleCallbacks
 * @ORM\Table(name="Rol")
 * @UniqueEntity(
 *		fields = "nombre",
 *		message = "Nombre existente. Elija un nuevo nombre."
 *		)
 */ 
class Rol
{ 

    /**
	 * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=255, nullable=false, unique=false)
	 * @Assert\NotBlank(
	 *       message = "El nombre no puede estar vacío."
	 *		)
	 * @Assert\Length(
     *      max = "36",
     *      maxMessage = "El nombre debe tener {{ limit }} caracteres como máximo."
	 *		)
     */
    protected $nombre;

   
    /**
     * @ORM\Column(type="string", length=512, nullable=true, unique=false)
     * @Assert\Length(
     *      max = "36",
     *      maxMessage = "La descripción debe contener {{ limit }} caracteres como máximo."
     *      )
     */
    protected $descripcion;


	/**
     * @ORM\ManyToMany(targetEntity="PermisoAutorizacion", inversedBy="roles")
	 * @ORM\JoinTable(name="rol_permisoautorizacion")
     **/
    // JoinColumn(name="permisoautorizacion_id", referencedColumnName="id", nullable=true) 
    protected $permisos;

	/**
	* @ORM\OneToMany(targetEntity="Usuario", mappedBy="rol")
	*/
	protected $usuarios;

    /**
     * @ORM\ManyToOne(targetEntity="Empresa", inversedBy="roles")
     * @ORM\JoinColumn(name="empresa_id", referencedColumnName="id", nullable=false)
     * @Assert\NotNull(message = "El campo Empresa no puede estar en blanco.")
     */
    protected $empresa;


	/**********************************
     * __construct
     *
     * 
     **********************************/	
    public function __construct($nombre, $descripcion, Empresa $empresa) 
	{
        $this->nombre = $nombre;
        $this->descripcion = $descripcion;
        $this->permisos = new ArrayCollection();
        $this->usuarios = new ArrayCollection();
        $this->empresa = $empresa;
    }

	/**********************************
     * __toString()
     *
     * Este método sirve para poder popular los comboboxes en los forms.
     *********************************/ 
    public function __toString()
	{
		return $this->getNombre();
	}
	
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set nombre
     *
     * @param string $nombre
     * @return Rol
     */
    public function setNombre($nombre)
    {
        $this->nombre = $nombre;
    
        return $this;
    }

    /**
     * Get nombre
     *
     * @return string 
     */
    public function getNombre()
    {
        return $this->nombre;
    }


    /**
     * Add PermisoAutorizacion
     *
     * @param \CHOMP\SGIBundle\Entity\PermisoAutorizacion $permiso
     * @return Rol
     */
    public function addPermiso(\CHOMP\SGIBundle\Entity\PermisoAutorizacion $permiso)
    {
        $permiso -> addRole($this);
        $this->permisos[] = $permiso;
    
        return $this;
    }

    /**
     * Remove PermisoAutorizacion
     *
     * @param \CHOMP\SGIBundle\Entity\PermisoAutorizacion $permiso
     */
    public function removePermiso(\CHOMP\SGIBundle\Entity\PermisoAutorizacion $permiso)
    {
        $this->permisos->removeElement($permiso);
    }

    /**
     * Add PermisoAutorizacion 
     *
     * @param \Doctrine\Common\Collections\ArrayCollection
     */
    public function addPermisos(\Doctrine\Common\Collections\ArrayCollection $permisos)
    {
        $this->permisos = $permisos;
        return $this;
    }

    /**
     * Get permisoAutorizacion
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getPermisos()
    {
        return $this->permisos;
    }
	

    /**
     * Set descripcion
     *
     * @param string $descripcion
     * @return Rol
     */
    public function setDescripcion($descripcion)
    {
        $this->descripcion = $descripcion;
    
        return $this;
    }

    /**
     * Get descripcion
     *
     * @return string 
     */
    public function getDescripcion()
    {
        return $this->descripcion;
    }

    /**
     * Add usuarios
     *
     * @param \CHOMP\SGIBundle\Entity\Usuario $usuarios
     * @return Rol
     */
    public function addUsuario(\CHOMP\SGIBundle\Entity\Usuario $usuarios)
    {
        $this->usuarios[] = $usuarios;
    
        return $this;
    }

    /**
     * Remove usuarios
     *
     * @param \CHOMP\SGIBundle\Entity\Usuario $usuarios
     */
    public function removeUsuario(\CHOMP\SGIBundle\Entity\Usuario $usuarios)
    {
        $this->usuarios->removeElement($usuarios);
    }

    /**
     * Get usuarios
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getUsuarios()
    {
        return $this->usuarios;
    }


    /**
     * Set empresa
     *
     * @param \CHOMP\SGIBundle\Entity\Empresa $empresa
     * @return Rol
     */
    public function setEmpresa(\CHOMP\SGIBundle\Entity\Empresa $empresa)
    {
        $this->empresa = $empresa;
    
        return $this;
    }

    /**
     * Get empresa
     *
     * @return \CHOMP\SGIBundle\Entity\Empresa 
     */
    public function getEmpresa()
    {
        return $this->empresa;
    }

   
}